shell在环境中存储了两种基本类型的数据——环境变量和shell变量shell变量是bash存放的少量数据,剩下的基本都是环境变量。

• printenv - 打印部分或所有的环境变量
• set - 设置 shell 选项
• export — 导出环境变量,让随后执行的程序知道。
• alias - 创建命令别名
1
2
3
4

# 1、shell环境

1、环境变量

  如果 shell 环境中的一个成员既不可用 set 命令也不可用 printenv 命令显示,则这个变量是别名。 输入不带参数的 alias 命令来查看它们:

printenv USER //打印特定变量的数值
echo $USER //打印特定用户的数值
set | less //输出结果按照字母顺序排列:
alas //显示所有的别名
foo='this is a test'//添加环境变量
1
2
3
4
5

2、如何建立shell环境

​ 当我们登录系统后,启动 bash 程序,并且会读取一系列称为启动文件的配置脚本, 这些文件定义了默认的可供所有用户共享的 shell 环境。精确的启动顺序依赖于要运行的 shell 会话 类型。有两种 shell 会话类型:一个是登录 shell 会话,另一个是非登录 shell 会话

非登录shell用户会读取一下文件。

文件 内容
/etc/bash.bashrc 应用于所有用户的全局配置文件。
~/.bashrc 用户私有的启动文件。可以用来扩展或重写全局配置脚本中的设置。

登录shell会话的启动文件。

文件 内容
/etc/profile 应用于所有用户的全局配置脚本。
~/.bash_profile 用户私人的启动文件。可以用来扩展或重写全局配置脚本中的设置。
~/.bash_login 如果文件 ~/.bash_profile 没有找到,bash 会尝试读取这个脚本。
~/.profile 如果文件 ~/.bash_profile 或文件 ~/.bash_login 都没有找到,bash 会试图读取 这个文件。 这是基于 Debian 发行版的默认设置,比方说 Ubuntu。

​ PATH 变量经常(但不总是,依赖于发行版)在 /etc/profile 启动文件中设置,修改PATH变量,添加目录到PATH目录列表的末尾。

3、激活我们的修改

​ 我们对于文件.bashrc的修改不会生效,直到我们关闭终端会话,再重新启动一个新的会话, 因为 .bashrc文件只是在刚开始启动终端会话时读取。但是通过 source .bashrc可以强迫bash重新读取修改过的文件。

vi .bashrc //使用文编编辑器编辑文件
source .bashrc //bash重新读取编辑过的文件
1
2

# 2、vi编辑器

​ 使用vi编辑器的理由。

  • vi编辑器很多系统都预装了。

  • vi是轻量级且执行速度很快的编辑器。

    vim(vi improved)是“vi”的一款高级替代版本。vim通常是linux系统“vi”的符号链接(别名)。

1、停止和启动vi

vi file//启动vi
:q //退出vi
:q! //修改了文件,强制不保存退出
:wq //修改了文件,保存退出

1
2
3
4
5

2、移动光标

按键 移动光标
l or 右箭头 向右移动一个字符
h or 左箭头 向左移动一个字符
j or 下箭头 向下移动一行
k or 上箭头 向上移动一行
0 (零按键) 移动到当前行的行首。
^ 移动到当前行的第一个非空字符。
$ 移动到当前行的末尾。
w 移动到下一个单词或标点符号的开头。
W 移动到下一个单词的开头,忽略标点符号。
b 移动到上一个单词或标点符号的开头。
B 移动到上一个单词的开头,忽略标点符号。
Ctrl-f or Page Down 向下翻一页
Ctrl-b or Page Up 向上翻一页
numberG 移动到第 number 行。例如,1G 移动到文件的第一行。
G 移动到文件末尾。

3、基本编辑

  • 基本编辑:进入vi编辑器时,默认是编辑模式,在键盘上按下insert或者i后进入插入模式,此时可以输入文本。按下Esc退出插入模式返回到命令模式。按下u 按键,当在命令模式下,vi 将会撤销你所做的最后一次修改。

  • 追加文本:vi 提供了追加文本的命令,明智地命名为"a"命令。 vi 提供了一种快捷方式("A"命令)来移动到当前行的末尾,并且能添加文本。

  • 打开一行。这会在存在的两行之间插入一个空白行,并且进入插入模式。 把光标移动到某一行上,按下o,在当前行的下方打开一行,按下O,在当前行的上方打开一行。

  • 删除文本:

    命令 删除的文本
    x 当前字符
    3x 当前字符集其后的两个字符
    dd 当前行
    5dd 当前行及随后的四行文本
    dW 从光标位置开始到下一个单词的开头
    d$ 从光标位置开始到当前行的行尾
    d0 从光标位置开始到当前行的行首
    d^ 从光标位置开始到文本行的第一个非空字符
    dG 从当前行到文件的末尾
    d20G 从当前行到文件的第20行。
  • 剪切、复制和粘贴文本:使用 d 命令,删除的部分被复制到一个 粘贴缓冲区中(看作剪切板)。过后我们执行小 p命令把剪切板中的文本粘贴到光标位置之后, 或者是大 P 命令把文本粘贴到光标之前。y 命令来“拉”(复制)文本,和 d 命令剪切文本的方式差不多。

  • 链接行:大写的 J把行与行之间连接起来。

  • 查找和替换:f命令查找一行。例如,命令 fa 会把光标定位到同一行中 下一个出现的"a"字 符上。在一行中执行了字符的查找命令之后,通过输入分号来重复这个查找。/用于查找整个文件。当你输 入/命令后,一个"/"字符会出现在屏幕底部。下一步,输入要查找的单词或短语后, 按下回车。光标就会移动到下一个包含所查找字符串的位置。通过 n命令来重复先前的查找。

  • 全局查找和替换:vi 使用 ex 命令来执行查找和替代操作。

    :%s/Line/line/g //全局将Line替换为line
    
    1
    条目 含义
    运行一个ex命令
    % 指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。另外,操作范 围也 可以用 1,5 来代替(因为我们的文件只有5行文本),或者用 1,$ 来代替,意 思是 “ 从第一行到文件的最后一行。” 如果省略了文本行的范围,那么操作只对 当前行生效。
    s 指定操作。在这种情况下是,替换(查找与替代)。
    /Line/line 查找类型与替代文本。
    g 这是“全局”的意思,意味着对文本行中所有匹配的字符串执行查找和替换操 作。如果省略 g,则 只替换每个文本行中第一个匹配的字符串。
    :%s/Line/line/gc //全局将Line替换为line,并会出来提示框。
    
    1
    按键 行为
    y 执行替换操作
    n 跳过这个匹配的实例
    a 对这个及随后所有匹配的字符串执行替换操作。
    q or esc 退出替换操作。
    l 执行这次替换并退出。l 是 “last” 的简写。
    Ctrl-e, Ctrl-y 分别是向下滚动和向上滚动。用于查看建议替换的上下文。
  • 编辑多个文件 vi file1 file2...

  • 文件之间转换。:n从这个文件转到下一个文件。在切换这些命令的时候可能需要执行:w 1.txt来先保存编辑的文件,然后再切换。 :N回到先前的文件。我们可以查看正在编辑的文件列表,使用:buffers 命令。运行这个 命令后,屏幕顶部就会显示出一个文件列表。这时要使用:buffer 命令, 其后加上缓冲区号码,来转换文件。

  • 从一个文件复制内容到另一个文件。

    :buffer 1//转到缓冲区编号为1的文件 通过`yy`等命令来复制内容。
    :buffer 2//转到编号为的文件,将粘贴区的文件进行复制。
    
    1
    2
  • 插入整个文件到另一个文件。

    :r foo.txt //把指定的文件插入到光标位置之前
    
    1
  • 保存工作

    :wq //保存退出
    :w 1.txt//保存特定的文件,如果1.txt不存在,会将正在编辑的文件另存为1.txt
    
    1
    2

# 3、自定制shell提示符

1、解剖一个提示符

默认提示符:包含了用户名、主机名和当前工作目录。提示符是由PS1(prompt string one)的环境变量定义的。

[root@iZwtrtjgg3qrk8Z ~]#
echo PS1 //[\u@\h \W]\$
1
2

提示符中用到的转义字符。

\a		以ASCII格式编码的铃声,当遇到这个转义序列时,计算机会发出嗡嗡的响声。
\d      以日、月、天格式俩表示当前日期
\h		本地机器的主机名,不带末尾的域名
\H		完整的主机名
\j		运行在当前shell会话中的工作数
\l		当前终端设备名
\n		换行符
\r		回车符
\s		shell程序名
\t		以24小时制,'hours:minutes:seconds'的格式表示当前时间
\T		以12小时制表示当前时间
\@		以12小时工作制,AP/PM表示当前时间
\A		以24小时工作制,hours:minutes格式表示当前时间
\u		当前用户名
\v		shell程序的版本号
\V		Version and release numbers of the shell
\w		当前工作目录名
\W		当前功能工作目录的最后部分。
\!		当前命令的历史号
\#		当前会话中的命令数
\$		表示$字符,超级管理员显示#字符
\[		标志着一系列或多个非打印字符的开始
\]		标志着非打印字符的技术。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

2、自定义提示符

​ 可以用一个变量将当前提示符存起来,也可以在某个文件定义该提示符,然后导出,使之提示符永久存在。

1、用一个变量将当前提示符保存起来;
ps1_old=$PS1;
2、自定义提示符
PS1="\a\h"
1
2
3
4

Last Updated: 2/26/2020, 10:45:01 PM